package com.cqie.util;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;


import java.util.Collections;

public class CodeGenerator {

    public static void main(String[] args) {
        // 数据库连接配置
        String url = "jdbc:mysql://localhost:3306/intelligent_cloud_diagnosis?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8";
        String username = "root";
        String password = "123456";

        // 代码生成器配置
        FastAutoGenerator.create(url, username, password)
                // 全局配置
               .globalConfig(builder -> {
                    builder.author("不吃海鲜") // 作者
                          .outputDir(System.getProperty("user.dir") + "/src/main/java") // 输出目录，这里是项目的java目录
                          .enableSwagger() // 开启Swagger支持（如果项目使用Swagger的话）
                          .disableOpenDir() // 生成代码后不打开文件夹（可选配置）
                          .fileOverride() // 覆盖已有的文件（谨慎使用）
                          .build();
                })
                // 包配置
               .packageConfig(builder -> {
                    builder.parent("com.example") // 父包名
                          .moduleName("mybatisplusgeneratordemo") // 模块名，按需修改
                          .entity("entity") // 实体类包名
                          .service("service") // 服务层包名
                          .serviceImpl("service.impl") // 服务实现类包名
                          .mapper("mapper") // Mapper接口包名
                          .xml("mapper.xml") // Mapper XML文件包名（如果使用XML配置的话）
                          .controller("controller") // 控制器包名
                          .pathInfo(Collections.singletonMap(OutputFile.mapper, System.getProperty("user.dir") + "/src/main/resources/mapper")); // 设置Mapper XML文件的输出路径（如果使用XML配置的话）
                })
                // 策略配置
               .strategyConfig(builder -> {
                    builder.addInclude("your_table_name") // 需要生成代码的表名，可以是多个，使用逗号分隔，也可以使用通配符（如：t_* 表示以t_开头的所有表）
                          .entityBuilder() // 实体类策略配置
                          .enableLombok() // 使用Lombok简化实体类代码（需添加Lombok依赖到项目中）
                          .enableTableFieldAnnotation() // 开启表字段注解（例如 @TableField 注解）
                          .build();
                })
                // 使用Freemarker模板引擎
               .templateEngine(new FreemarkerTemplateEngine())
               .execute();
    }
}